/*
1.这个class将代替instoreVisit原来的trigger部分功能更新分销日期。
2.只代替有分销记录
3.更新分销把最大日期记录的分销日期设置为开始日期，把以前的分销日期置空
4.考虑跨天，跨月的情况
--create by hxj 20101216
*/
public with sharing class TriggerDateISV
{
    /*
      当竞品或库存相关的trigger执行完之后，这个trigger再调用此方法
      传入的isvIds是分销有变化的所有记录
    */
    public static void invokeByTrigger(set<id> isvIds)
    {
       //查询传入id的所有店面记录，排除无分销的
       list<In_Store_Visit__c> lISVCur=[select id,OutletName_del__c,LastDistributionDate__c,StartDate__c  from In_Store_Visit__c 
              where id in:isvIds and InventoryDisplayPriceGreaterThan0__c>0 order by StartDate__c desc,OutletName_del__c asc];
       //本月       
       list<In_Store_Visit__c> lIsvTM=new  list<In_Store_Visit__c>();
       //上个月
       list<In_Store_Visit__c> lIsvLM=new  list<In_Store_Visit__c>();
       //set<id> outletIds=new set<id>();
       
       for(In_Store_Visit__c i:lISVCur)
       {
          //outletIds.add(i.OutletName_del__c);
          if(i.StartDate__c.month()==date.today().month())
          {
              lIsvTM.add(i);              
          }
          else
          {
              if(i.StartDate__c.month()==date.today().addMonths(-1).month())
              {
                  lIsvLM.add(i);
              }
            
          }
          
       }
      //保存所有需要更新的记录 
      Map<id,In_Store_Visit__c> mapAll=new Map<id,In_Store_Visit__c>();
       
       //相同店面只保存日期最大的店面
       Map<id,In_Store_Visit__c> mapIsvTM=new  Map<id,In_Store_Visit__c>();
       for(In_Store_Visit__c i:lIsvTM)
       {
         if(!mapIsvTM.containsKey(i.OutletName_del__c))
         {
             mapIsvTM.put(i.OutletName_del__c,i);
         }
       }
       //赋值分销日期
       for(In_Store_Visit__c i:mapIsvTM.values())
       {
           if(i.LastDistributionDate__c==null)
           {
               i.LastDistributionDate__c=i.StartDate__c;
               mapAll.put(i.id,i);
           }
       }
       
       Map<id,In_Store_Visit__c> mapIsvLM=new  Map<id,In_Store_Visit__c>();
       for(In_Store_Visit__c i:lIsvLM)
       {
         if(!mapIsvLM.containsKey(i.OutletName_del__c))
         {
             mapIsvLM.put(i.OutletName_del__c,i);
         }
       }
        //赋值分销日期
       for(In_Store_Visit__c i:mapIsvLM.values())
       {
           if(i.LastDistributionDate__c==null)
           {
               i.LastDistributionDate__c=i.StartDate__c;
               mapAll.put(i.id,i);
           }
       }
  
       //更新这个月记录相关的其他店面记录
       if(mapIsvTM.size()>0)
       {
           list<In_Store_Visit__c> lstOtherTM=[select id,LastDistributionDate__c  from In_Store_Visit__c 
               where id not in:isvIds and OutletName_del__c in:mapIsvTM.keyset() and LastDistributionDate__c!=null and StartDate__c=this_month];
            //把分销日期置空
            for(In_Store_Visit__c i:lstOtherTM)
            {
               i.LastDistributionDate__c=null;
               mapAll.put(i.id,i);
            } 
       }
      
      
        //更新上个月记录相关的其他店面记录
        if(mapIsvLM.size()>0)
        {
              list<In_Store_Visit__c> lstOtherLM=[select id,LastDistributionDate__c  from In_Store_Visit__c 
                   where id not in:isvIds and OutletName_del__c in:mapIsvLM.keyset() and LastDistributionDate__c!=null and StartDate__c=last_month];
              //把分销日期置空
              for(In_Store_Visit__c i:lstOtherLM)
              {
                 i.LastDistributionDate__c=null;
                 mapAll.put(i.id,i);
              }          
        }
         
      
     //更新所有记录
     if(mapAll.size()>0)
     {
        update mapAll.values();
     } 
    }
}